package com.whfc.hdc.service;

import com.whfc.common.exception.BizException;
import com.whfc.common.result.PageData;
import com.whfc.hdc.dto.AppDeviceCmdDTO;
import com.whfc.hdc.dto.AppDeviceDTO;
import com.whfc.hdc.dto.AppDeviceFeatureDTO;
import com.whfc.hdc.dto.AppDeviceParamDTO;

import java.util.List;

/**
 * @Description: 硬件通用服务
 * @author: xugcheng
 * @version: 1.0
 * @date: 2021-09-28 10:06
 */
public interface AppDeviceService {

    /**
     * 查询硬件
     *
     * @param id
     * @return
     */
    AppDeviceDTO getDeviceById(Integer id);

    /**
     * 根据sn查询硬件
     *
     * @param sn
     * @return
     */
    AppDeviceDTO getDeviceBySn(String sn);


    /**
     * 根据sn查询硬件
     *
     * @param sn
     * @return
     */
    AppDeviceDTO getDeviceBySnAndType(String sn,Integer deviceType);

    /**
     * 根据code查询硬件
     *
     * @param code
     * @return
     */
    AppDeviceDTO getDeviceByCode(String code);

    /**
     * 查询硬件列表(查询系统所有硬件)
     *
     * @param pageNum
     * @param pageSize
     * @param type
     * @param sn
     * @return
     */
    PageData<AppDeviceDTO> getDeviceList(Integer pageNum, Integer pageSize, Integer type, String sn);

    /**
     * 清理设备缓存
     *
     * @param id
     */
    void cleanDeviceCache(Integer id);

    /**
     * 生成设备SN
     *
     * @param deviceType
     * @param startDeviceId
     * @param endDeviceId
     */
    void generateDeviceSN(Integer deviceType, Integer startDeviceId, Integer endDeviceId);


    /**
     * 获取硬件参数
     *
     * @param deviceId
     * @return
     */
    List<AppDeviceParamDTO> getDeviceParam(Integer deviceId);

    /**
     * 设置硬件参数已读
     *
     * @param deviceId
     */
    void setDeviceParamRead(Integer deviceId);


    /**
     * 发布硬件指令
     *
     * @param deviceCmdDTO
     * @throws BizException
     */
    void pubDeviceCmd(AppDeviceCmdDTO deviceCmdDTO) throws BizException;

    /**
     * 设置硬件指令已发送
     *
     * @param deviceId
     * @param cmd
     * @throws BizException
     */
    void setDeviceCmdSend(Integer deviceId, Integer cmd) throws BizException;

    /**
     * 设置硬件指令已确认
     *
     * @param deviceId
     * @param cmd
     * @throws BizException
     */
    void setDeviceCmdAck(Integer deviceId, Integer cmd) throws BizException;

    /**
     * 设置硬件指令失效
     *
     * @param deviceId
     * @param cmd
     * @throws BizException
     */
    void setDeviceCmdSuccess(Integer deviceId, Integer cmd) throws BizException;

    /**
     * 设置硬件指令失效
     *
     * @param deviceId
     * @param cmd
     * @throws BizException
     */
    void setDeviceCmdFail(Integer deviceId, Integer cmd) throws BizException;

    /**
     * 新增硬件特征值
     *
     * @param featureDTO
     * @throws BizException
     */
    void addDeviceFeature(AppDeviceFeatureDTO featureDTO) throws BizException;

    /**
     * 查询硬件特征值
     *
     * @param deviceId
     * @return
     * @throws BizException
     */
    List<AppDeviceFeatureDTO> getDeviceFeatureS(Integer deviceId) throws BizException;

    /**
     * 注册硬件
     *
     * @param type
     * @param sn
     * @param code
     * @param color
     * @return
     */
    int rigisterDevice(Integer type, String sn, String code, String color);
}
